package com.athuiju.servicebase.exceptionHandler;

import com.athuiju.commonutils.R;
import com.athuiju.servicebase.util.ExceptionUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;


//@ControllerAdvice，是Spring3.2提供的新注解,
// 它是一个Controller增强器,可对controller中被 @RequestMapping注解的方法加一些逻辑处理。
// 最常用的就是异常处理
//https://www.cnblogs.com/lenve/p/10748453.html
@ControllerAdvice
@Slf4j
public class GlobalExceptionHandler {
    //Spring的@ExceptionHandler可以用来统一处理方法抛出的异常
    //给这个方法加上@ExceptionHandler注解，这个方法就会处理类中其他方法（被@RequestMapping注解）抛出的异常。
    @ExceptionHandler(Exception.class)//Exception.class表示不论出现什么异常都会这个方法都会执行
    @ResponseBody//@ResponseBody的作用是为了能够返回数据
    public R error(Exception e){
        e.printStackTrace();
        return R.error();
    }

    //处理特定异常(算术异常)
    @ExceptionHandler(ArithmeticException.class)
    @ResponseBody
    public R error(ArithmeticException e){
        e.printStackTrace();
        return R.error().message("执行了自定义异常");
    }

    //处理自定义异常
    @ExceptionHandler(HuiJuException.class)
    @ResponseBody
    public R error(HuiJuException e){
        //msg是自己设置的异常信息，getMessage()方法是获取java的Exception抛出的信息
        log.error(ExceptionUtil.getMessage(e));
        e.printStackTrace();
        return R.error().message(e.getMsg()).code(e.getCode());
    }


}
